package org.example.mpdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.*;
import org.example.mpdemo.entity.User;

import java.util.List;

// BaseMapper是Mybatis-Plus提供的基类，继承了Mybatis的Mapper接口，并提供了一些常用的方法，比如selectById、selectOne、selectCount等。
//使用BaseMapper的好处是可以自动生成CRUD方法，不需要自己编写SQL语句。
public interface UserMapper extends BaseMapper<User> {
//    //    查询所有用户
//    @Select("SELECT * FROM user")
//    public List<User> find();
//
//    @Insert("insert into user values (#{id}, #{username}, #{password}, #{birthday})")

    /// /    int返回值表示插入行数，如果影响的行数为0，表示插入失败
//    public int insert(User user);

//       根据id查询用户
    @Select("SELECT * FROM t_user WHERE id = #{id}")
    User selectById(int id);

    //查询所有用户及其订单
    @Select("select  * from `t_user`")
//    自定义查询结果，将orders表关联到user表中
//    使用results后，需要手动写所有的列名和属性名，并且要写javaType和many，many表示该属性是集合，javaType表示集合中元素的类型
    @Results({
            @Result(column = "id", property = "id"),
            @Result(column = "username", property = "username"),
            @Result(column = "password", property = "password"),
            @Result(column = "birthday", property = "birthday"),
//            将id作为条件查询orders表，并将结果集赋值给orders属性
            @Result(column = "id", property = "orders", javaType = List.class,
                    many = @Many(select = "org.example.mpdemo.mapper.OrderMapper.selectByUid"))

    })
    List<User> selectAllUsersAndOrders();
}
